package org.noear.solon.mybatis.flex.generator;

import java.sql.Timestamp;
import java.util.Date;

import org.dromara.hutool.core.collection.set.SetUtil;

import com.mybatisflex.codegen.Generator;
import com.mybatisflex.codegen.config.GlobalConfig;
import com.mybatisflex.codegen.dialect.JdbcTypeMapping;
import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;

/**
 * @author 胡高
 */
public class SystemTableGeneratior {

    public static GlobalConfig createGlobalConfigUseStyle1() {
        //创建配置内容
        GlobalConfig globalConfig = new GlobalConfig();

        //设置根包
        globalConfig.setBasePackage("cn.hg.solon.youcan.system");

        //设置表前缀和只生成哪些表
        //globalConfig.setTablePrefix("sys_");
        globalConfig.setUnGenerateTables(SetUtil.of("sys_job", "sys_job_log"));

        //设置生成 entity 并启用 Lombok
        globalConfig.setEntityGenerateEnable(true);
        globalConfig.setEntityWithLombok(false);
        globalConfig.getEntityConfig().setOverwriteEnable(true);
        globalConfig.getTableDefConfig().setOverwriteEnable(true);

        //设置生成 mapper
        globalConfig.setMapperGenerateEnable(true);

        // 设置逻辑删除字段
        globalConfig.setLogicDeleteColumn("del");

        //可以单独配置某个列
        //        ColumnConfig columnConfig = new ColumnConfig();
        //        columnConfig.setColumnName("tenant_id");
        //        columnConfig.setLarge(true);
        //        columnConfig.setVersion(true);
        //        globalConfig.setColumnConfig("account", columnConfig);

        return globalConfig;
    }


    public static GlobalConfig createGlobalConfigUseStyle2() {
        //创建配置内容
        GlobalConfig globalConfig = new GlobalConfig();

        //设置根包
        globalConfig.getPackageConfig()
        .setBasePackage("cn.hg.solon.youcan.system");

        //设置表前缀和只生成哪些表
        globalConfig.getStrategyConfig()
        //.setTablePrefix("sys_")
        .setUnGenerateTables(SetUtil.of("sys_job", "sys_job_log"));

        //设置生成 entity 并启用 Lombok
        globalConfig.enableEntity()
        .setWithLombok(true);

        //设置生成 mapper
        globalConfig.enableMapper();

        // 设置逻辑删除字段
        globalConfig.setLogicDeleteColumn("del");

        //可以单独配置某个列
        //        ColumnConfig columnConfig = new ColumnConfig();
        //        columnConfig.setColumnName("tenant_id");
        //        columnConfig.setLarge(true);
        //        columnConfig.setVersion(true);
        //        globalConfig.getStrategyConfig()
        //                .setColumnConfig("account", columnConfig);

        return globalConfig;
    }

    public static void main(String[] args) {
        //配置数据源
        MysqlDataSource dataSource = new MysqlDataSource();
        dataSource.setUrl("jdbc:mysql://127.0.0.1:3306/youcan-solon?characterEncoding=utf-8");
        dataSource.setUser("root");
        dataSource.setPassword("123456");

        //创建配置内容，两种风格都可以。
        GlobalConfig globalConfig = createGlobalConfigUseStyle1();
        //GlobalConfig globalConfig = createGlobalConfigUseStyle2();

        // Timestamp类型日期用Date代替
        JdbcTypeMapping.registerMapping(Timestamp.class, Date.class);

        //通过 datasource 和 globalConfig 创建代码生成器
        Generator generator = new Generator(dataSource, globalConfig);

        //生成代码
        generator.generate();
    }

}
